package models

import (
	"time"
)

// 订单状态常量
const (
	OrderStatusPending   = 10 // 待付款
	OrderStatusPaid      = 20 // 已付款/待发货
	OrderStatusShipped   = 30 // 已发货/待收货
	OrderStatusCompleted = 40 // 已完成
	OrderStatusCancelled = 50 // 已取消
	OrderStatusRefunded  = 60 // 已退款
)

// 订单主表
type Order struct {
	BaseModel
	UserID        uint      `gorm:"index:idx_user"`               // 用户ID
	OrderNo       string    `gorm:"type:varchar(50);uniqueIndex"` // 订单号
	TotalAmount   MyDecimal `gorm:"type:numeric(12,2);not null"`  // 订单总金额
	PayAmount     MyDecimal `gorm:"type:numeric(12,2);not null"`  // 实付金额
	FreightAmount MyDecimal `gorm:"type:numeric(12,2)"`           // 运费
	Status        int       `gorm:"default:10"`                   // 订单状态
	PayTime       time.Time // 支付时间
	ShipTime      time.Time // 发货时间
	ConfirmTime   time.Time // 确认收货时间
}

// 订单商品项
type OrderItem struct {
	BaseModel
	OrderID   uint      `gorm:"index:idx_order"`             // 关联订单ID
	ProductID uint      `gorm:"index"`                       // 商品ID
	SkuID     uint      `gorm:"index"`                       // SKU ID
	SkuName   string    `gorm:"type:varchar(255)"`           // SKU名称
	SkuSpecs  string    `gorm:"type:varchar(255)"`           // SKU规格描述
	Price     MyDecimal `gorm:"type:numeric(12,2);not null"` // 单价
	Quantity  int       `gorm:"not null"`                    // 数量
}

// 订单收货地址快照
type OrderAddress struct {
	BaseModel
	OrderID   uint   `gorm:"uniqueIndex"`                // 关联订单ID
	Consignee string `gorm:"type:varchar(50);not null"`  // 收货人
	Mobile    string `gorm:"type:varchar(20);not null"`  // 手机
	Province  string `gorm:"type:varchar(20)"`           // 省
	City      string `gorm:"type:varchar(20)"`           // 市
	District  string `gorm:"type:varchar(20)"`           // 区/县
	Detail    string `gorm:"type:varchar(255);not null"` // 详细地址
}

// 订单操作日志
type OrderLog struct {
	BaseModel
	OrderID  uint      `gorm:"index"`             // 关联订单ID
	Action   string    `gorm:"type:varchar(50)"`  // 操作类型
	Operator string    `gorm:"type:varchar(50)"`  // 操作人（用户或管理员）
	Message  string    `gorm:"type:varchar(255)"` // 操作说明
	Time     time.Time // 操作时间
}

// 订单物流信息
type OrderShipment struct {
	BaseModel
	OrderID uint   `gorm:"uniqueIndex"`      // 关联订单ID
	ShipNo  string `gorm:"type:varchar(50)"` // 物流单号
	Company string `gorm:"type:varchar(50)"` // 物流公司
}

// 设置表名
func (Order) TableName() string         { return "orders" }
func (OrderItem) TableName() string     { return "order_items" }
func (OrderAddress) TableName() string  { return "order_addresses" }
func (OrderLog) TableName() string      { return "order_logs" }
func (OrderShipment) TableName() string { return "order_shipments" }
